/*****************************************************************************
 *
 *  (C) Copyright MICROSOFT Corp., 1994
 *
 *  Title:	WSHOICTL.H - IOCTL interface for Wshell
 *
 *  Version:    4.00
 *
 *  Date:       30-Nov-1988
 *
 *  Author:	RAL
 *
 *----------------------------------------------------------------------------
 *
 *  Change log:
 *
 *     DATE     REV                 DESCRIPTION
 *  ----------- --- ----------------------------------------------------------
 *  01-Aug-1994 RAL Original
 *
 *****************************************************************************/

#ifndef _WSHIOCTL_H
#define _WSHIOCTL_H


#define SHELLFILENAME "\\\\.\\SHELL"

//
// Flags for _SHELL_SuggestSingleMSDOSMode
//
// SSAMFLAG_KILLVM
//	A fatal application error has occurred.  Display a warning box
//	unconditionally.  Regardless of the answer, terminate the VM.
//	If this bit is set, the call does not return.
//
//  SSAMFLAG_TIMER
//	Not used.  Sorry.
//
//  SSAM_REQREALMODE
//	App requires *real* mode, not V86 mode, not EMM stuff, not
//	QEMM.  Just pure unadulterated real mode.  Also known as
//	SSAM_COMANCHE, because Comanche does an "lgdt" to enter
//	protected mode without checking if it is safe to do so.
//	This flag is inspected by AppWiz to decide how to set up
//	the config.sys and autoexec.bat.
//
//  SSAM_KILLUNLESSTOLD
//	Suggest Single MS-DOS mode (unless suppressed via PIF), and
//	if the answer is "Okay", then kill the VM.  If the user
//	says, "Keep running", then let it stay.
//
//  SSAM_FROMREGLIST
//	This app was run from a command prompt, triggered by registry
//	settings.  Just re-execute it in its own VM so that APPS.INF
//	settings will take effect.
//
//  SSAM_FAILEDAPI
//	This app just made an API call that was unsuccessful or
//	unsupported.  If the app terminates within 0.1 second,
//	then suggest single-app mode.  If the app continues
//	execution, then don't suggest.
//

#define SSAMFLAG_KILLVM 	0x0000001
#define SSAMFLAG_TIMER		0x0000002
#define SSAMFLAG_REQREALMODE	0x0000004
#define SSAMFLAG_KILLUNLESSTOLD 0x0000008
#define SSAMFLAG_FROMREGLIST	0x0000010
#define SSAMFLAG_FAILEDAPI	0x0000020

//
//  IOCTL codes
//
#define WSHIOCTL_GETVERSION	0
#define WSHIOCTL_BLUESCREEN	1
#define WSHIOCTL_GET1APPINFO	2
#define WSHIOCTL_SIGNALSEM	3
#define WSHIOCTL_MAX		4	/* Remember, _MAX = _LIMIT + 1 */

//
//  Result codes
//
#define SSR_CONTINUE	0
#define SSR_CLOSEVM	1
#define SSR_KILLAPP	2

//
//  Sizes for strings
//
#define MAXVMTITLESIZE	32
#define MAXVMPROGSIZE	64
#define MAXVMCMDSIZE	64
#define MAXVMDIRSIZE	64
#define MAXPIFPATHSIZE	260

typedef struct _SINGLEAPPSTRUC {    /* shex */

	DWORD	SSA_dwFlags;
	DWORD	SSA_VMHandle;
	DWORD	SSA_ResultPtr;
	DWORD	SSA_Semaphore;
	char	SSA_PIFPath[MAXPIFPATHSIZE];
	char	SSA_VMTitle[MAXVMTITLESIZE];
	char	SSA_ProgName[MAXVMPROGSIZE];
	char	SSA_CommandLine[MAXVMCMDSIZE];
	char	SSA_CurDir[MAXVMCMDSIZE];

} SINGLEAPPSTRUC;

//
// Structures for WSHIOCTL_BLUESCREEN.
//
// lpvInBuffer must point to a BLUESCREENINFO structure.
// lpvOutBuffer must point to a DWORD which receives the message box result.
// The message box result is an IDXX value, as defined in windows.h.
//

/* H2INCSWITCHES -t */
typedef struct _BLUESCREENINFO {    /* bsi */

	char *	pszText;	    /* Message text (OEM character set) */
	char *	pszTitle;	    /* Message title (OEM character set) */
				    /* NULL means "Windows" */
	DWORD	flStyle;	    /* Message box flags (see windows.h) */
				    /* Add'l flags defined in ddk\inc\shell.h */

} BLUESCREENINFO;
/* H2INCSWITCHES -t- */



#endif // _WSHIOCTL_H
